/*—————————————————————————————————————————————————————————— 表单组件ts接口 ——————————————————————————————————————————————————————————*/
import { soltType, antdSize, styleAndCss } from '@/utils/interface' // 引入公共接口
import { ColProps, RowProps } from 'antd'
import { FormProps, FormItemProps, FormInstance } from 'antd/es/form'
import type { FormSupportItemKys, formSupportItemProps } from './toolkit'

// 表单渲染成员属性
interface formItems<T extends FormSupportItemKys = FormSupportItemKys>
  extends styleAndCss,
    Pick<
      FormItemProps,
      | 'colon'
      | 'label'
      | 'labelCol'
      | 'wrapperCol'
      | 'tooltip'
      | 'required'
      | 'rules'
      | 'validateTrigger'
      | 'initialValue'
      | 'noStyle'
    >,
    // 为了防错所以此name名称须为必填属性
    Required<Pick<FormItemProps, 'name'>> {
  type: T // 成员需要的组件类型
  col?: ColProps // 成员单独col配置

  // 成员内容配置
  itemconfig?: formSupportItemProps[T]

  // 需要额外渲染的dom
  extraRendering?: soltType
}

// 表单组件传参
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
interface FormsProps
  extends styleAndCss,
    Pick<
      FormProps,
      | 'disabled'
      | 'labelCol'
      | 'wrapperCol'
      | 'requiredMark'
      | 'labelAlign'
      | 'labelWrap'
      | 'layout'
      | 'onFieldsChange'
      | 'onFinish'
      | 'onFinishFailed'
      | 'onValuesChange'
      | 'name'
    > {
  slotTop?: soltType // 上方插入内容
  slotDown?: soltType // 下方插入内容
  showFoundationBtn?: boolean // 是否展示基础按键部分
  formSize?: antdSize // 表单展示大小
  formitemlist: Array<formItems> // 表单渲染成员列表
  formitemvalue?: object // 表单成员动态值内容
  row?: RowProps // 整体排列属性配置
}

// ref访问限定内容
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
interface FormRef {
  form: FormInstance // 当前表单实例
  formValues: unknown // 此时表单的内容

  formReset: () => void // 表单全部重置方法
}

export type { FormsProps, FormRef, formItems }
